// Copyright (C) 2011  Andrew H. Chan
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

#ifndef _TYPEDEFS_H__
#define _TYPEDEFS_H__

#include "basic_includes.h"

const unsigned int NUM_SEGS = 8;

typedef unsigned int uint;

typedef std::vector<std::vector<bool> > bmatrix;
typedef std::vector<std::vector<char> > cmatrix;
typedef std::vector<bool> bvector;
typedef std::vector<char> cvector;
typedef std::pair<std::vector<char>, std::vector<char> > dcvector;

//typedef boost::unordered_map<bvector, uint> v_to_id;
//typedef boost::unordered_map<uint, bvector> id_to_v;

// vertex id (uint), type (char), data (int), weight (int) 
// type: 0 - mutation on left hap
//       1 - mutation on right hap 
//       2 - reassortment on left hap
//       3 - reassortment on right hap
// data is which site mutated, details of reassortment event
// weight is for mutations
//typedef boost::tuple<uint, char, int, int> edge;
//typedef std::vector<edge> edge_list;
//typedef std::pair<std::vector<edge>, std::vector<edge> > edge_lists;
//typedef boost::unordered_map<uint, edge_lists> adj_list;

#endif
